package com.zygh.lz.dao;

import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.zygh.lz.entity.IllegalData;
import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Param;
import org.apache.ibatis.annotations.Select;

import java.util.List;
import java.util.Map;

@Mapper
public interface IllegalDataMapper extends BaseMapper<IllegalData> {

    /**
     * 查询所有记录
     *
     * @return 返回集合，没有返回空List
     */
    List<IllegalData> listAll();


    /**
     * 根据主键查询
     *
     * @param id 主键
     * @return 返回记录，没有返回null
     */
    IllegalData getById(Integer id);

    /**
     * 新增，插入所有字段
     *
     * @param illegalData 新增的记录
     * @return 返回影响行数
     */
    int insert(IllegalData illegalData);

    /**
     * 新增，忽略null字段
     *
     * @param illegalData 新增的记录
     * @return 返回影响行数
     */
    int insertIgnoreNull(IllegalData illegalData);

    /**
     * 修改，修改所有字段
     *
     * @param illegalData 修改的记录
     * @return 返回影响行数
     */
    int update(IllegalData illegalData);

    /**
     * 修改，忽略null字段
     *
     * @param illegalData 修改的记录
     * @return 返回影响行数
     */
    int updateIgnoreNull(IllegalData illegalData);

    /**
     * 删除记录
     *
     * @param illegalData 待删除的记录
     * @return 返回影响行数
     */
    int delete(IllegalData illegalData);


    //根据警号查询一周内的执法总数据
    int findillegalDataByCode(@Param("code") String code,
                              @Param("startTime") String startTime,
                              @Param("endTime") String endTime);

    //根据警号查询一周内的不通违法类型执法总数据
    int findillegalDataByWfxw(@Param("code") String code,
                              @Param("startTime") String startTime,
                              @Param("endTime") String endTime,
                              @Param("wfxw") String wfxw);

    //重点执法
    @Select("<script> SELECT COUNT(*) count FROM illegal_data il LEFT JOIN illegal i ON il.wfxw = i.illegal_code " +
            "<where>  " +
            "<if test = 'code != null'>" +
            "   il.warning_signal = #{code} " +
            "</if>" +
            "AND i.id IS NOT NULL " +
            "and il.wfsj between #{startTime} and #{endTime} " +
            "<if test = 'sectionName != null'> " +
            "   and il.battalion like  CONCAT('%',#{sectionName},'%') " +
            "</if>" +
            "</where>" +
            "</script>")
    int findIllegalDataEmphasis(@Param("code") String code,
                                @Param("startTime") String startTime,
                                @Param("endTime") String endTime,
                                @Param("sectionName") String sectionName);


    List<Map<String, Object>> findIllegalDateRanking(@Param("code") String code,
                                                     @Param("startTime") String startTime,
                                                     @Param("endTime") String endTime);

    List<Map<String, Object>> findIllegalDateTop3(@Param("startTime") String startTime,
                                                  @Param("endTime") String endTime);


    List<Map<String, Object>> findIllegalData(@Param("startTime") String startTime,
                                              @Param("endTime") String endTime,
                                              @Param("sectionName") String sectionName);

    List<Map<String, Object>> findIllegalType(@Param("startTime") String startTheDay,@Param("endTime") String endDate,@Param("sectionName") String dui);

    List<Map<String, Object>> findIllegalDataByType(@Param("startTime") String startTheDay,@Param("endTime") String endDate, @Param("sectionName")String dui, @Param("wfxw")String wfxw,@Param("num")int num);
}
